﻿#region License
/*

	Copyright (C) 2008 Oliver Charles, Daniel Hollander

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program.  If not, see <http://www.gnu.org/licenses/>.
	
*/
#endregion

using System;
using System.Drawing;

namespace Moebius.Rendering.Direct3D9
{
    public class Texture : Rendering.ITexture, IDisposable
    {
        private readonly SlimDX.Direct3D9.Texture internalTexture;

        #region Properties

        private Renderer renderer;

        private readonly int width;
        private readonly int height;

        public int Width
        {
            get { return width; }
        }

        public int Height
        {
            get { return height; }
        }

        public Renderer Renderer
        {
            get { return renderer; }
            set { renderer = value; }
        }

        #endregion

        #region Constructors

        public Texture(SlimDX.Direct3D9.Texture direct3DTexture, Size textureDimensions)
        {
            internalTexture = direct3DTexture;
            width = textureDimensions.Width;
            height = textureDimensions.Height;
        }

        #endregion

        #region Texture Implementation

        public void Activate()
        {
            Renderer.Direct3DDevice.SetTexture(0, internalTexture);
        }

        #endregion

        #region IDisposable Implementation

        private bool disposed;

        ~Texture()
        {
            Dispose(false);
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (!disposed)
            {
                if (disposing)
                    internalTexture.Dispose();

                disposed = true;
            }
        }

        #endregion
    }
}